Dart 2.5发布,支持Dart与C相互调用
ML Complete,按机器学习排序的代码补全
通过分析 GitHub 上 Dart 代码的大量语料库,训练基于给定上下文的可能出现的成员的模型来实现的,这个模型由 TensorFlow Lite 驱动,可以用来预测开发人员正要编辑的代码,这个新特性称为 ML Complete。
ML Complete 可以在所有支持 Dart 的编辑器中使用,包括 Android Studio、IntelliJ 和 VS Code 等。由于该特性仍出于预览阶段,若要试用可在 Flutter dev channel 和 Dart dev channel 版。
dart:ffi 外部函数接口
目前,直接从 Dart 调用 C 的支持仅限于使用原生扩展深入集成到 Dart VM 中,或者 Flutter 应用程序可以间接调用 C,通过使用 Platform Channel 调用主机,在那里调用 C,这是一个不受欢迎的双重间接。
在主机操作系统(OS)上调用基于 C 的系统 API
为单个操作系统或跨平台调用基于 C 的库
调用 Linux 命令 system,该命令允许执行任何系统命令,传递给它的参数实际是传递给 shell/terminal,并在其运行。下面是这个命令的 C 头文件:
C 函数及其参数的类型和返回类型
对应的 Dart 函数及其类型
typedef SystemC = ffi.Int32 Function(ffi.Pointer<Utf8> command);
// Dart header typedef:
typedef SystemDart = int Function(ffi.Pointer<Utf8> command);
final dylib = ffi.DynamicLibrary.open('/usr/lib/libSystem.dylib');
// Look up the system function.
final systemP = dylib.lookupFunction<SystemC, SystemDart>('system');
final cmdP = Utf8.toUtf8('open http://dart.dev');
// Invoke the command.
systemP(cmdP);
// Free the pointer.
cmdP.free();
调用基于 C 的框架和组件
Dart 的第二个核心用途是调用基于 C 的框架和组件。如上的示例,它使用 TensorFlow Lite,一个基于 C 的 API,使用 Dart:ffi 允许在需要提供代码完成的所有操作系统上运行 TensorFlow,并具有本机 TensorFlow 实现的高性能。
目前 dart:ffi 属于预览阶段,所以还会有一些限制。
const list = [i as int];
const set = {if (list is List<int>) ...list};
const map = {if (i is int) i: "int"};
开源中国征稿啦!
开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。
现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿